:man source: Yabs
:man manual: Yabs Manual

yabs(1)
=======

Name
----

yabs - Yet another build system

Synopsis
-------

*yabs* [_OPTIONS_] [_FILE_]

Description
-----------

yabs is a build system that can be used to generate Makefiles

Options
-------

*-h*, *--help*::
	Print help
*-n*, *--new*::
	Create a new build file
*-V*, *--verbose*[_FILE_]::
	Verbosely parse configuration file
*-p*, *--parse=*[_FILE_]::
	Print configuration file
*-e*, *--extract=*[_FILE_]::
	Extract distribution tarball
*-m*, *--make=*[_FILE_]::
	Generate Makefile based on profile

Configuration
-------------

Configuration files are written in yaml and can have the extensions yaml, yml, 
or ybf. The configuration must be placed in the root directory of the project. 
Valid configuration files must at least start with "---", and multi-doc files 
must start with "---" and end with "...". Valid keys are as 
follows:

*target*::
	Name of the binary to be produced. If none is set then the name of the 
	current directory is used
*os*::
	The operating system for the profile. If there is a multi-doc 
	configuration then the name of the operating system will be appended to
	the generated Makefile
*remote*::
	Remote system the build will be sent to
*lang*::
	The language the project is written in
*arch*::
	The architecture of the system
*cc*::
	The C compiler to be used
*cxx*::
	The C++ compiler to be used
*ccflags*::
	C compiler flags
*cxxflags*::
	C++ compiler flags
*lflags*::
	Linker flags
*libs*::
	Libraries to link to. These must not be prepended with "-l" as they 
	traditionally are in a Makefile
*incdir*::
	Directories to include. Directories must not be prepended with "-I" as 
	they traditionally are in a Makefile.
*dist*::
	The distrubution tarball to be generated
*before-script*::
	List of scripts that will be executed before anything is done with the
	profile
*after-script*::
	List of scripts that will be executed after the profile is read

Example
-------

----
An exmple for a single document project would be:
---
os: linux
target: yabs
cc: gcc
cxx: g++
incdir: include
...
The resulting Makefile generated by this configuration would be a single file 
named "Makefile" as there is only one profile.

An exmple for multi-document project would be:
---
os: linux
target: yabs
cc: gcc
cxx: g++
incdir: include
...
---
os: freebsd
target: yabs
cc: clang
cxx: clang++
...
The resulting Makefile generated by this configuration would be two files named 
"Makefile-linux" and "Makefile-freebsd" as there are two profiles.
----

Reporting Bugs
--------------

Report bugs to the yabs mailing list *yabs@librelist.org*. Pull requests may 
also be made at *https://github.com/0X1A/yabs*

Author
------

Alberto Corona <alberto@0x1a.us>
